Software code—comprising instructions that may be used to control or instruct the operation of one or more processing devices such as microprocessors, microcontrollers, co-processors, etc.—is ubiquitous and pervades many aspects of modern day technology. The scope of software development projects, sometimes involving numerous software developers (i.e., those persons responsible for the actual drafting of software code) working over periods of many months or even years, requires the use of software code development processes that developers need to adopt in order to provide high quality code. Such software development processes generally specify the various steps developers must take prior to considering the software code “completed.” For example, software development processes may specify how developers are to review code quality, perform unit testing, fix defects etc. before the code is checked in using well-known configuration management and/or source control repository tools.
Practice has demonstrated that ensuring high fidelity adoption of software code development processes results in higher quality code. Improved quality of such software code ultimately leads to improved quality of the overall, integrated software project and, ultimately, improved end-user satisfaction. Conversely, failure by developers to adhere to such software code development processes results in an increased likelihood of lower quality code, more errors in code functionality, increased integration problems and end-user dissatisfaction.
Despite the importance of following code development processes, it remains difficult today (particularly on large projects employing numerous and/or geographically diverse developers) for project managers to verify that developers are actually adhering to the recommended software code development processes. Since the actual creation of the software code typically occurs on the local workstations and integrated development environments (IDE) of a number of developers, it is almost always physically impossible for a project manager to directly monitor each developer's workstation and his/her work. This lack of oversight often leads to developers bypassing the software code development processes thereby reducing the quality of the resulting code. Furthermore, the time and effort required to correct the resulting quality issues decreases the overall efficiency with which the development project is completed.
To address these issues, systems have been developed to provide automated monitoring of the adherence of developers to software development processes. For example, Johnson and Kou described the so-called Zorro system in “Automated Recognition of Test-Driven Development with Zorro”, AGILE 2007. The Zorro system uses an open source framework (Hackystat) for deploying “sensors” in various development environment tools to collect time-stamped, raw event data. A Software Development Stream Analysis (SDSA) application analyzes the raw event data to determine the presence of “episodes” within the time-ordered stream of event data. The Zorro application then performs rule-based analysis of the episodes to determine whether developers are adhering to a specific development process, e.g., test driven development (TDD). While systems such as Zorro are beneficial to determining the adherence of developers to desired processes, it is foreseeable that more complex processes will require tracking of a significant number of states (e.g., the episodes used in the Zorro system), thereby leading to a larger number of more complex rules. In order to better scale process adherence monitoring systems like Zorro, it would be beneficial to provide techniques for more efficiently managing the rules used to assess process adherence.